package iso2.struts2;

import iso2.dominio.ArticuloInvalidoException;
import iso2.dominio.Carrito;
import iso2.dominio.Pedido;
import iso2.dominio.StockInsuficienteException;
import iso2.dominio.UsuarioNoLogeadoException;
import iso2.persistencia.ConexionesOcupadasException;

import java.sql.SQLException;

import paypal.domain.Pago;
import paypal.excepciones.ImporteInvalidoException;
import paypal.excepciones.MesInvalidoException;
import paypal.excepciones.NoHayConexionesLibresException;
import paypal.excepciones.PagoRechazadoException;
import paypal.excepciones.TarjetaCaducadaException;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial") 
public class PagarConTarjeta extends ActionSupport {
	private String numeroDeTarjeta;
	private int mesCaducidad, anioCaducidad;
	private String titular;
	
	public String execute() {
		Carrito carrito;
		Pedido pedido;
		
		try {
			carrito = 
				(Carrito)ActionContext.getContext().getSession().get("carrito");
			
			// Realizar el pedido
			pedido = carrito.doPedido();
			
			// Realizar el pago
			Pago.getPago().pagar(numeroDeTarjeta, mesCaducidad, anioCaducidad, titular, carrito.getImporte(), "");
			
			// Confirmar el pago del pedido
			pedido.setEstado("pagado");
			pedido.updateEstadoPedido();
		
		
			return SUCCESS;
		} catch (NoHayConexionesLibresException e) {
			return "NoHayConexionesLibresException";
		} catch (TarjetaCaducadaException e) {
			return "TarjetaCaducadaException";
		} catch (MesInvalidoException e) {
			return "MesInvalidoException";
		} catch (PagoRechazadoException e) {
			return "PagoRechazadoException";
		} catch (ImporteInvalidoException e) {
			return "ImporteInvalidoException";
		} catch (SQLException e) {
			return "SQLException";
		} catch (ConexionesOcupadasException e) {
			return "ConexionesOcupadasException";
		} catch (ArticuloInvalidoException e) {
			return "ArticuloInvalidoException";
		} catch (StockInsuficienteException e) {
			return "StockInsuficienteException";
		} catch (UsuarioNoLogeadoException e) {
			return "UsuarioNoLogeadoException";
		}
	}

	public void setNumeroDeTarjeta(String numeroDeTarjeta) {
		this.numeroDeTarjeta = numeroDeTarjeta;
	}

	public void setMesCaducidad(int mesCaducidad) {
		this.mesCaducidad = mesCaducidad;
	}

	public void setAnioCaducidad(int anioCaducidad) {
		this.anioCaducidad = anioCaducidad;
	}

	public void setTitular(String titular) {
		this.titular = titular;
	}
	
}
